iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0

矩陣(Matrix),是由數字或其他類型的數據按行與列排列而成的的矩形數組,通常用 mXn 來表示,其中m是行數,n是列數,矩陣的元素通常用 a(i, j) 來表示,i為行索引,j為列索引,而矩陣常見的運算包含加減法、乘法和轉置,多用於表示和數據處理,尤其是數據分析和機器學習等領域當中。

範例說明 :

題目 : 編寫一個C++程式,實現一個函數來計算兩個矩陣的乘積,要求函數接受兩個矩陣及其維度作為參數,並回傳乘積矩陣。輸入的內容包含第一個矩陣的維度為 mXn、第二個矩陣的維度為 nXp 和兩個矩陣的元素,輸出的結果為乘積矩陣的維度 mXp及其元素。

Step 1 : 讀取兩個矩陣的維度及元素

Step 2 : 利用迴圈計算矩陣乘積

Step 3 : 將結果矩陣的維度和元素輸出

vector<vector<int>> multiplyMatrices(const vector<vector<int>>& A, const vector<vector<int>>& B) {
    int m = A.size();          
    int n = A[0].size();       
    int p = B[0].size();      
    vector<vector<int>> C(m, vector<int>(p, 0)); 
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < p; j++) {
            for (int k = 0; k < n; k++) {
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }
    return C;
}

int main() {
    int m, 
    // 輸入第一個矩陣的維度
    cin >> m >> n;
    vector<vector<int>> A(m, vector<int>(n));
    // 輸入第一個矩陣的元素
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            cin >> A[i][j];
        }
    }
    int nB;
    // 輸入第二個矩陣的維度
    cin >> nB >> p; 
    vector<vector<int>> B(nB, vector<int>(p));
    // 輸入第二個矩陣的元素
    for (int i = 0; i < nB; i++) {
        for (int j = 0; j < p; j++) {
            cin >> B[i][j];
        }
    }
	  //計算乘積矩陣
    vector<vector<int>> C = multiplyMatrices(A, B);
    //輸出乘積矩陣的維度和元素
    cout << m << " " << p << endl;
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < p; j++) {
            cout << C[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}

優點 :

  1. 以整齊的方式來表示數據,特別是多維數據,讓數據更容易理解和操作
  2. 可以輕鬆進行切片、轉置、聚合等操作,使得數據的處理更加靈活

缺點 :

  1. 對於稀疏矩陣,可能會浪費大量記憶體空間。儲存大量零元素會導致空間的浪費
  2. 矩陣的維度和大小需要在運算前明確表示

上一篇
Day20 Dynamic programming 題目3 : 198. House Robber
下一篇
Day22 Matrix 題目1:48. Rotate Image
系列文
C++刷題:LeetCode Top 100 Liked30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言